home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / PASCAL / ALLSWAGS.ZIP / SWAGG-M.ZIP / MISC.SWG / 0134_Using Ofs in BASM.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-05-26  |  931 b   |  49 lines

  1.  
  2. { Updated MISC.SWG on May 26, 1995 }
  3.  
  4. {
  5. > PROCEDURE test(portno: word; value: byte; VAR result: BYTE);
  6. > ASSEMBLER;
  7. > ASM
  8. > mov dx, portno
  9. > mov al, value
  10. > out dx, al
  11. > in dx, al
  12. > mov di, OFS(result); (*)
  13. > stosb
  14. > END;
  15.  
  16. > (*): This is the problem: you can't use the OFS() function
  17. > in an ASM statement.
  18.  
  19. No problem. You use les di,result.
  20. }
  21.  
  22. procedure test(portno:word; value:byte; var result:byte);
  23. assembler; asm
  24.  mov dx,portno
  25.  mov al,value
  26.  out dx,al
  27.  in dx,al
  28.  les di,result
  29.  mov es:[di],al
  30. end;
  31.  
  32. {
  33. es:di becomes segment:offset to Result. I think this would work as a
  34. function better. It is similar but less code. Function results are in
  35. AX for works, AL for bytes, AX:DX for pointers.
  36. }
  37.  
  38. function test(portno:word; value:byte:byte;
  39. assembler; asm
  40.  mov dx,portno
  41.  mov al,value
  42.  out dx,al
  43.  in dx,al
  44. end;
  45.  
  46. {
  47. All done. AL's value is returned as the Byte result right away.
  48. }
  49.